"""
    文件/图片上传
"""

from django.conf import settings
from rest_framework.views import APIView
import os
from .random_name import random
from .json_response import JsonResponse


class UploadFile(APIView):
    """
        上传单个文件
    """

    def post(self, request, *args, **kwargs):
        # 接收上传的文件
        rev_file = request.FILES.get('avatar')

        # 判断是否有文件
        if not rev_file:
            return JsonResponse(data={}, code=400, message='图片不存在')

        # 获得一个唯一的名字 uuid + hash
        new_name = random()
        # 准备写入的url
        file_path = os.path.join(settings.MEDIA_ROOT, new_name + os.path.splitext(rev_file.name)[1])
        # 开始写入到本地磁盘
        try:  # 文件可能会很大，所以需要分次写入，可能会出现错误，所以需要用到try
            f = open(file_path, 'wb')
            # 多次写入, 原因是系统可能资源不够，例如内存
            for i in rev_file.chunks():
                f.write(i)
            # 关闭文件
            f.close()
            return JsonResponse(data={'name': 'media/' + new_name + os.path.splitext(rev_file.name)[1]}, code=200,
                                message='图片不存在')
        except Exception as e:
            return JsonResponse(data={}, code=400, message='文件写入有错:' + str(e))
